package com.ruoyi.wms.service;

import java.util.List;
import java.math.BigDecimal;
import com.ruoyi.wms.domain.WmsInventory;
import com.ruoyi.wms.domain.dto.InventoryIncreaseRequest;
import com.ruoyi.wms.domain.dto.InventoryIncreaseResponse;
import com.ruoyi.wms.domain.dto.InventoryDecreaseRequest;
import com.ruoyi.wms.domain.dto.InventoryDecreaseResponse;

/**
 * 库存信息Service接口
 * 
 * @author ruoyi
 * @date 2024-01-01
 */
public interface IWmsInventoryService 
{
    /**
     * 查询库存信息
     * 
     * @param inventoryId 库存信息主键
     * @return 库存信息
     */
    public WmsInventory selectWmsInventoryById(Long inventoryId);

    /**
     * 查询库存信息列表
     * 
     * @param wmsInventory 库存信息
     * @return 库存信息集合
     */
    public List<WmsInventory> selectWmsInventoryList(WmsInventory wmsInventory);

    /**
     * 新增库存信息
     * 
     * @param wmsInventory 库存信息
     * @return 结果
     */
    public int insertWmsInventory(WmsInventory wmsInventory);

    /**
     * 修改库存信息
     * 
     * @param wmsInventory 库存信息
     * @return 结果
     */
    public int updateWmsInventory(WmsInventory wmsInventory);

    /**
     * 批量删除库存信息
     * 
     * @param inventoryIds 需要删除的库存信息主键集合
     * @return 结果
     */
    public int deleteWmsInventoryByIds(Long[] inventoryIds);

    /**
     * 删除库存信息信息
     * 
     * @param inventoryId 库存信息主键
     * @return 结果
     */
    public int deleteWmsInventoryById(Long inventoryId);

    /**
     * 入库操作
     * 
     * @param wmsInventory 库存信息
     * @param qty 入库数量
     * @param documentNo 单据号
     * @param operator 操作人
     * @return 结果
     */
    public int inbound(WmsInventory wmsInventory, BigDecimal qty, String documentNo, String operator);

    /**
     * 出库操作
     * 
     * @param inventoryId 库存ID
     * @param qty 出库数量
     * @param documentNo 单据号
     * @param operator 操作人
     * @return 结果
     */
    public int outbound(Long inventoryId, BigDecimal qty, String documentNo, String operator);

    /**
     * 冻结库存
     * 
     * @param inventoryId 库存ID
     * @param qty 冻结数量
     * @param documentNo 单据号
     * @param operator 操作人
     * @return 结果
     */
    public int freezeInventory(Long inventoryId, BigDecimal qty, String documentNo, String operator);

    /**
     * 解冻库存
     * 
     * @param inventoryId 库存ID
     * @param qty 解冻数量
     * @param documentNo 单据号
     * @param operator 操作人
     * @return 结果
     */
    public int unfreezeInventory(Long inventoryId, BigDecimal qty, String documentNo, String operator);

    /**
     * 根据条件查询库存记录
     * 
     * @param wmsInventory 库存查询条件
     * @return 库存信息
     */
    public WmsInventory selectWmsInventoryByCondition(WmsInventory wmsInventory);

    /**
     * 增加商品库存
     * 
     * @param request 增加库存请求
     * @return 增加库存响应
     */
    public InventoryIncreaseResponse increaseInventory(InventoryIncreaseRequest request);

    /**
     * 减少商品库存
     * 
     * @param request 减少库存请求
     * @return 减少库存响应
     */
    public InventoryDecreaseResponse decreaseInventory(InventoryDecreaseRequest request);
}